package online.longzipeng.mywebdemo.utils;

import cn.hutool.core.util.ObjectUtil;
import cn.hutool.core.util.StrUtil;
import online.longzipeng.mywebdemo.entity.User;
import online.longzipeng.mywebdemo.enums.StringStyleEnum;

import java.lang.reflect.Field;

/**
 * @author lzp
 * @Date:2022/11/14
 * @description: 自定义对象工具类
 */
public class MyObjectUtils {

	/**
	 * 获取对象的所有私有字段
	 *
	 * @param obj    需要获取字段的对象
	 * @param prefix 通用取按追
	 */
	public static String getFields(Class obj, String prefix) {
		StringBuilder result = new StringBuilder();
		Field[] fields = obj.getDeclaredFields();
		int length = fields.length;
		for (Field field : fields) {
			field.setAccessible(true);
			if (StrUtil.isNotBlank(prefix)) {
				result.append(prefix);
			}
			result.append(field.getName());
			if (--length != 0) {
				result.append(",");
			}
		}
		return result.toString();
	}

	/**
	 * 获取对象的所有私有字段
	 *
	 * @param obj             需要获取字段的对象
	 * @param prefix          通用取按追
	 * @param stringStyleEnum 字符串类型枚举
	 */
	public static String getFields(Class obj, String prefix, StringStyleEnum stringStyleEnum) {
		String result = getFields(obj, prefix);
		if (ObjectUtil.equal(stringStyleEnum, StringStyleEnum.CAMEL_CASE)) {
			result = StrUtil.toCamelCase(result);
		} else {
			result = StrUtil.toUnderlineCase(result);
		}
		return result;
	}

	public static void main(String[] args) {
		System.out.println(getFields(User.class, "sm."));
		System.out.println(getFields(User.class, "sm.", StringStyleEnum.UNDER_LINE_CASE));
	}
}
